在不同電腦之間因為有分享資源和資訊的需求而產生彼此連結的電腦系統稱之為網路 (networks)
,網路使電腦可以連結彼此讓資量在不同電腦間互相傳遞,本章將介紹這個計算機科學中的延伸領域,由於篇章較多所以分為上下兩章介紹。
全球資訊網中的重要元件就是超文件格式
,包含連結到其他文件的嵌式超連結 (hyperlinks)
傳送超文件的網路協定與處理使用者所要求的超文件資料的伺服器,一切都從這些開始,他們讓全球資訊網快速的成長。
讓使用者在網際網路上存取超文件的套裝軟體分為兩大類,瀏覽器 (browser)
和網站伺服器 (webserver)
,瀏覽器負責讀取使用者所需要的資料柄有組織的方式呈現資料內容,網站伺服器負責提供使用者(瀏覽器)所要求得超文件存取,而超文件一班都透過所謂的超文件傳輸協定 (Hypertext Transfer Protocol, HTTP)
來傳送。
為了能夠定位及擷取網站的文件,所以每個文件都被賦予一個唯一的地址,稱為網址 (Uniform Resource Locator, URL)
,它包含瀏覽器所需要的資訊,可以讓瀏覽器知道要連接哪一個伺服器以及要獲取哪些資源。
一個典型的 URL 需要有四個部分:
可以參考 What is a URL? 這篇有詳細的介紹什麼是 URL, 格式與各自代表的內容。
傳統超文件與一般文字檔案相似,也是使用 ASCII 或 Unicode 編碼,差別在於超文件有一種特殊符號也稱為標籤 (tag)
用來描述文件資料要如何顯示在螢幕上,這種標籤系統稱為超文件標示語言 (Hypertext Markup Language, HTML)
,因此為了讓瀏覽器顯示網頁於使用者螢幕上並且連接相關文件資料,網頁作者需要使用 HTML 來描述瀏覽器需要的資訊,而瀏覽器則讀取 HTML 的標籤後就知道如何將文件呈現在電腦螢幕上。
是一種用來設計標記法的標準形式,使其能夠以文字檔的形式表示表示各種資料,遵照 XML 的標準,標記法(又稱標示語言 (Markupo Language)
) 已經發展出標示數學、多媒體資料和音樂的格式,實際上 HTML 是基於 XML 標準的標示語言,用來標示網頁資料。
XML 示範了如何制定一個有廣大應用的標準,基於 XML 發展得標記法能發展出標準且通用的標示語言,有這個標準標示語言就能發展各種不同的應用,以這種方式發展的標示語言具備統一的形式,能夠彼此結合以應付更複雜的應用。
若需要由用戶端(如瀏覽器)進行遭做的行爲稱為用戶端 (client-side) 動作
,反之若需要由私服器端(網站伺服器)進行的操作就稱為伺服端 (server-side) 動作
,早期處理伺服端東做的方式是透過CGI (Common Gateway Interface)
指令進行,讓使用者能夠要求執行處存在伺服器端的程式,這種方法的一種變通方式是讓用戶啟用稱為 servlet
的程式元件在伺服器端運行。
在傳送資料的過程中需樣網路上所有電腦一起合作,因此處理傳送過程的軟體需要安裝於網際網路的每台電腦中,本章會介紹這種軟體的整體結構。
網路通訊軟體的主要工作是提供兩台電腦之間傳送訊息所需要的基礎架構,網際網路的軟體有四個階層,每個階層都包含一群軟體工具,這四個階層分別為應用層 (application layer)
, 傳輸層 (transport layer)
, 網路層 (network layer)
和鏈結層 (link layer)
,訊息一般起源於應用層然後傳送到傳送層與網路層,此時訊息將準備進行傳送,最後由鏈結層
進行傳送,訊息傳達到對方鏈結層後再往上經過忘錄層與傳輸層送到對方應用層。
應用層以類似包裹寄送與接收的方式使用傳輸層來傳送和接收網路訊息,應用層需要提供網路可辨識的地址(對方電腦地址),因此應用層必須使用網路上的名稱伺服器來轉譯我們習慣的名稱地址為 IP address。
傳輸層的一個重要的任務就是從應用層中接收訊息,並確保訊息具備正確的格式已進行網路傳輸,傳輸層需要把訊息切成數個片段,訊息的切割是有其必要性的,因為網路路由器在傳輸訊息時許多訊息會在從中經過,而過長的訊息會阻礙其他訊息在網路上的傳送,傳輸層的每個小片段訊息都會加上編號,這樣可以在收到這些片段訊息的時候將他重組回原本的信息,接著這些稱為封包 (packet)
的片段會被轉送到網路層,此時他們會被視為各自無關的訊息。
網路層的任務是在封包傳輸的過重中決定封包的傳送方向,實際上網路層與鏈結層結合後即可組成網路路由器中的軟體,網路曾負責管理路由器的轉送表,並且使用轉送表決定封包轉送的方向,而路由器的鏈結層負責接收和傳送封包。
因此當網路層從傳輸層收到封包後,會使用自己的轉送表以決定封包的傳送方向,所以網路層再決定好轉送方向後會將封包送往鏈結層以便真正進行傳送。
鏈結層負責傳送封包,因此鏈結層必須處理個電腦中個別網路的通訊細節,如果網路為乙太網路則要使用 CSMA/CD,若網路為 WiFi 則要改為使用 CSMA/CA。
當封包傳送後會被另一端的鏈結層所接收,他再將封包移交給網路層,網路層會將封包的最終目的地與他的轉送表進行比對,以決定封包的下個傳送方向點,當決定好後會再將封包返還給鏈結層讓封包繼續往下個目的地前進,就是這樣可以讓封包在到達目的地之前可以跳過一台又一台的電腦。
要注意的是傳輸的過程中只有鏈結層與網路層再參與封包的傳輸,所以路由器中只會有這兩個層接。
當封包到達最後的目的地時,網路層辨識出了封包的傳輸已經完成後,就會將封包轉給傳輸層,傳輸層會取出封包內的訊息片段並依照訊息片段重組回最初的訊息。
由於開方網路的需求導致網路標準需要公開,以便讓製造商可以製造相應的設備與軟體,其中一項標準是開放系統互連 (Open System Interconnection, OSI)
參考模型,是基於七層
的架構,但它一直無法取代四階層架構,主要因為他是在四階層架構已經真正成為網際網路標準後才被提出的。
TCP/IP 架構是基於四層架構所定的一群協定標準,事實上傳輸控制協定 (Transmission COntrol Protocol, TCP)
與網際網路協定 (Internet Protocol, IP)
只是這群協議中的兩個協議,因此應該說 TCP/IP 是傳輸層某個版本的定義,而其他版本包含用戶數據包協議 (User Datagram Protocol, UDP)
,這個版本類似運送包裹時可以選擇不同貨運公司,每個貨運公司都提供相同的基本服務但有各自的特色。
TCP/IP 與 UDP 有幾項差異,其中之一是在應用層要求傳送訊息之前,TCP 的傳輸層會先傳送自己的訊息到目的地的傳輸層,告知有訊息即將傳送過去,然後再開始傳送訊息前等待對方先回應,以這樣的方式在傳送訊息之前先建立連線,而 UDP 則不會在傳送資料前建立這樣的連線,他只會傳送訊息到指定位置後就不管了,所以 UDP 也被稱為無連線傳輸協議 (connectionless protocol)
。
另外一個差異是在傳輸起點與終點的 TCP 傳輸層會進行告知與回應再進行封包封包傳輸的方式彼此合作以確保所有訊息片段都成功送到目標,所以 TCP 也被稱為可靠通訊協定 (reliable protocol)
,相反的 UDP 沒有這樣的機制所以被稱為不可靠通訊協定 (unreliable protocol)
。
TCP 與 UDP 的另一項差異是 TCP 提供流量控制 (flow control)
和壅塞控制 (congestion control)
,所謂的流量控制是指訊息起點的 TCP 傳輸層可降低訊息片段的傳輸率
以避免對方流量太過壅塞,而壅塞控制是指訊息起點的 TCP 傳輸層可以調整傳輸率
以緩解他和訊息目的地之間的流量擁塞。
IP 是網際網路實作的標準協定,網路層的任務是轉送封包和路由 (routing, 亦即路線安排)
,其中轉送封包是讓封包在網路中分程傳遞,在每一次訊息發送端的 IP 網路層在準備封包時都會附加一個所謂的中繼段個數 (hop count)
或生存時限
在封包上,這個數值代表封包被轉送的次數上限
,每當 IP 網路層要轉送一個封包時,他會將這個封包的中繼段數減一,有這樣的資訊可以確保封包在網路中被無止境的不斷傳送。
當一部電腦連接到網路時就會成為他人進行非法存取和破壞的目標之一,產生網路犯罪 (cybercrime)
問題,在本章中將探討網路安全性的相關議題,網路安全 (cybersecurity)
是探討保護電腦, 網路與資料免於這類攻擊的課題。
許多攻擊使用懷有惡意的軟體惡意軟體 (malware)
,這樣的軟體可能被傳送到目標電腦或在遠方進行攻擊,前者的例子包含電腦病毒
, 電腦蠕蟲
, 特洛伊木馬
和間諜軟體
。
監聽軟體 (sniffing software)
,他會搜集電腦內部運作的訊息並回報給攻擊者,有些公司使用間諜軟體獲取客戶資料等等,有可能被用來側錄電腦鍵盤所輸入的符號序列進而尋找密碼或信用卡卡號。相較於電腦病毒或間諜軟體等糾由內部感染的方式,連接網路的電腦也會受到遠方電腦執行某些軟體進行攻擊,其中一種就是阻斷服務 (denial of service, Dos)
攻擊,是一種讓對方電腦信息超載的攻擊,阻斷攻擊要在短時間內產生大量的訊息已淹沒目標伺服器,為了達到這個目的攻擊方會在許多不知情的電腦中植入軟體,等這些電腦中的軟體收到信號後送有被操控的電腦就會發出訊息攻擊目標,當攻擊的發生分散在不同主機時,這種攻擊方式就是分散式阻斷服務 (distributed denial of service, DDoS)
。
對電腦網路攻擊主要的預防機制是在網路上的某個節點過濾網路訊息,通常使用一種名為防火牆 (firewall)
的軟體,可以將它安裝於某個內部網路的閘道,這樣就可以過濾進出此網域的信息
,他被設計用來阻擋送往某些目的地的訊號或阻擋從黑名單送來的訊息,防火牆的另一個功能是阻擋假冒的來自網與內位置的所有訊息
,因為有些外來訊息會假裝是網域內的地址,這種偽裝技巧稱為詐騙 (spoofing)
攻擊。
另一種工具也具有過濾的含義,稱為代理伺服器 (proxy server)
,是一種用戶端與伺服器端之間的中介軟體
,目的是保護用戶端免於遭受到伺服器端的惡意攻擊,每當一個網域內的用戶端想連結該服務的伺服器時,實際上用戶連接到的是代理伺服器,他會做為用戶端與伺服器端的溝通中介,這樣做的第一個好處是伺服器不會知道代理伺服器並非真正的用戶端,實際上他永遠不會知道真實用戶端的存在,所以伺服器端就無法獲取客戶端網域內的構造資訊,第二個好處是代理伺服器能幫忙過濾伺服器傳送的訊息
。
最一種對付網路入侵的方式是使用防毒軟體 (antivirus software)
,防毒軟體可以用來偵測並移除已知的電腦病毒和其他檔案感染的問題,但事實上防毒軟體只是許多同類軟體的統稱,每一種防毒軟體設計用來偵測並移除特定
的感染問題,所以是一種一對一的關係。
密碼學 (Cryptography)
是研究如何在網路上能夠安全的傳送與接收訊息,密碼學工具如加密法 (encryption)
可以用傳送編碼的過的訊息,即使加密過的資料落到攻擊者手中也可以保持資料的機密性。
HTTP 安全版的實例是 HTTPS
加密協定,它的基礎是傳輸層安全協定 (Transport Layer Security, TLS)
以及後來的安全通訊協定 (Secure Sockets Layer, SSL)
。
密碼專家使用加密方法來保護信息但這些加密法都是基於編碼與解碼演算法以及密碼 (也稱為金鑰 (keys)
) 為主,但由於電腦的運算能力大幅進步,所以可以處理很長且看起來是隨機的金鑰,因此對稱式金鑰加密法 (symmetruc-key encryption)
使用了同樣的金鑰來處理訊息的編碼與解碼,提供了更佳的安全性。
公鑰加密 (public-key encrypt-ion)
使用兩把金鑰,一把是用來加密訊息的公鑰 (public key)
,另一把是用來解密的私鑰 (private key)
,要使用公鑰加密法首先先把公鑰散布給一個需要傳送訊息的點,而私鑰則留在本地嚴格的保管,接著訊息發送端利用公鑰將訊息加密並確認內容無慮後把訊息傳到本地,即使訊息是由知道公鑰的中介方轉送也無所謂,因為唯一能解密訊息的是擁有私鑰得本地,所以只要私鑰是私密的迅即就可以保持隱密性。
當然公鑰加密法也有淺在的問題,其中一個是確認所使用的公鑰是目標方所使用的公鑰,比如說有個人與銀行通訊,他想確認所使用的公鑰是銀行提供的公鑰,但若攻擊者冒充自己是銀行進而將偽裝的公鑰散布給某人,則某人家所加密的訊息傳送假冒銀行,這個訊息就只會對攻擊方有用,對真正的銀行沒有作用,因此知道正確的公鑰匙非常重要的。
確認公鑰的方法之一是建立可信任的網站,這些網站稱為憑證機構 (certificate authorities)
,其目的是維護個組織及其公鑰的列表,這些憑證機構如同伺服器一樣提供給用戶可靠的公鑰資訊,稱為憑證 (certificates)
,一個憑證包含該組織的名稱
和所發行的公鑰
。
最後要討論公鑰加密法在認證問題 (authentication)
上所扮演的角色,認證問題是確認訊息的來源,在某些公鑰加密法中加密與解密的金鑰是可以反轉
的,亦即訊息可用私鑰加密,任何以私鑰加密的訊息必定是來自於該方,因此擁有私鑰的那一方就能產生一組位元字串,稱為數位簽章 (digital signature)
,只有掌握私鑰的那方知道如何產生,將訊息附加數位簽章後,傳送方可以標記該訊息是經過認證的,當訊息被接收後接收方使用傳送方送來的公鑰來密數位簽章,因為只有私鑰持有者能產生私鑰加密的版本,所以能確保訊息是認證過的。